/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package master.client;

import info.client.InfoClient;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;

/**
 *
 * @author mark
 */
public class Queries extends JFrame implements ActionListener{
    
    //Menubar
    private JMenuBar menubar = new JMenuBar();
    //Menu-tabs
    private JMenu _managementinfo;
    private JMenu _users;
    private JMenu _queries;
    //Menu-items
    private JMenuItem managementinfo;
    private JMenuItem users;
    private JMenuItem queries;
    
    //Tabel met queries
    private JTable all_queries;
    
    private DefaultTableModel dtm;
    private JScrollPane scrollpane;
    private JTabbedPane tabs;
    
    private JPanel panel = new JPanel();
    private JButton add_query = new JButton();
    private JButton change_query = new JButton();
    private JButton remove_query = new JButton();
    private int allrows;
    private int selectedrow;
    private String query_name;
    private String query_text;
    
    private String query;
    private String[] columns;
    
    public Queries()
    {
        panel.setLayout(null);
        
        _managementinfo = new JMenu("Management");
        _users = new JMenu("Gebruikers");
        _queries = new JMenu("Rapporten");
        
        managementinfo = new JMenuItem("Managementgegevens");
        users = new JMenuItem("Overzicht gebruikers");
        queries = new JMenuItem("Overzicht rapporten");
        
        menubar.add(_managementinfo);
        menubar.add(_users);
        menubar.add(_queries);
        
        _managementinfo.add(managementinfo);
        _users.add(users);
        _queries.add(queries);
        
        managementinfo.addActionListener(this);
        users.addActionListener(this);
        queries.addActionListener(this);
        
        add_query.addActionListener(this);
        change_query.addActionListener(this);
        remove_query.addActionListener(this);
        
        add_query.setText("Rapport toevoegen");
        add_query.setBounds(new Rectangle(80, 25, 160, 25));
        change_query.setText("Rapport wijzigen");
        change_query.setBounds(new Rectangle(320, 25, 160, 25));
        remove_query.setText("Rapport verwijderen");
        remove_query.setBounds(new Rectangle(560, 25, 160, 25));
        
        tabs = new JTabbedPane();
        tabs.setBounds(0, 70, 800, 500);
        
        menubar.setBounds(0, 0, 800, 20);
        
        fillTable();
        
        all_queries.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );

        panel.add(menubar);
        panel.add(add_query);
        panel.add(change_query);
        panel.add(remove_query);
        
        setContentPane( panel );
                
        setVisible(true);
        setResizable(false);
        setSize(800, 600);
        setTitle("Mainscreen");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    private void fillTable() 
    {
        query = "SELECT COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'rapporten'";
        
        //Het verzenden van de inlogquery over de socket
        InfoClient.socketconnection.send(query);
        
        Object[][] result2 = InfoClient.socketconnection.read();
        
        //kijkt hoeveel columns eruit de query komen, zodat we weten hoe groot de array moet worden
        int j = 0;
        for(Object[] k : result2)
        {
            for(Object kk : k)
            {
                j++;         
            }
        }
        //de columns voor de jtable
        columns = new String[j];
        
        int i = 0;
        for(Object[] k : result2)
        {
            for(Object kk : k)
            {
                columns[i] = kk.toString(); 
            }
            i++;
        }
        
        //Het verzenden van de inlogquery over de socket
        InfoClient.socketconnection.send("SELECT * from rapporten");
        //Het ophalen van de resultaten van de query
        Object[][] result = InfoClient.socketconnection.read();
        
        dtm = new DefaultTableModel(result, columns);

        all_queries = new JTable(dtm);
        
        JTableHeader header = all_queries.getTableHeader();
        header.setBounds(0, 55, 800, 20);
        
        all_queries.setPreferredScrollableViewportSize(new Dimension(800, 200));
        all_queries.setFillsViewportHeight(true);
        
        scrollpane = new JScrollPane(all_queries);
        
        scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollpane.setHorizontalScrollBarPolicy(JScrollPane .HORIZONTAL_SCROLLBAR_ALWAYS);
        
        if(tabs.getTabCount() > 0)
        {
            tabs.remove(0);
        }
        
        //Voeg de tabel toe aan de tabs
        tabs.add("Rapporten", scrollpane);
        
        panel.add(tabs);
    }

    @Override
    public void actionPerformed(ActionEvent e) 
    {
            //Als het menuitem managementinfo is ingedrukt.
            if (e.getSource() == managementinfo){
                //Sluit dit scherm af en open een nieuwe instantie van het ManagementInfo scherm.
                this.setVisible(false);
                new ManagementInfo().setVisible(true);
                setDefaultCloseOperation(ManagementInfo.EXIT_ON_CLOSE);
            }
            //Als de change_query knop is ingedrukt
            else if (e.getSource() == change_query){
                //Kijk welke rij is geselecteerd     
               selectedrow = all_queries.getSelectedRow();
               //Als er geen rij is geselecteerd
               if(selectedrow == -1)
               {
                   //Laat een popupje zien waarop staat dat je een rij moet selecteren
                     JOptionPane.showMessageDialog(null, "Selecteer een rij","Mislukt",JOptionPane.WARNING_MESSAGE);
               }
               //Als er wel een rij is geselecteerd
               else
               {
                    //Haal de benodigde gegevens van de geselecteerde rij op.
                    query_name = dtm.getValueAt(selectedrow, 0).toString();
                    query_text = dtm.getValueAt(selectedrow, 1).toString();

                    //Open een nieuw Change_Query scherm met als argument de variabelen die hierboven worden gevuld.
                    new Change_Query(query_name, query_text).setVisible(true);
                    setDefaultCloseOperation(Change_Query.EXIT_ON_CLOSE);
               }

            }
            //Als de add_query knop is ingedrukt.
            else if (e.getSource() == add_query){
                //Kijk hoeveel rijen en in de tabel zitten en maak een String[] met zo veel slots.
                allrows = dtm.getRowCount();
                String[] rapportnamen = new String[allrows];
                //Vul de array met alle rapportnamen.
                for (int i=0; i<allrows; i++) {
                      query_name = dtm.getValueAt(i, 0).toString();
                      rapportnamen[i] = query_name;
                }
                //Open een nieuw Add_Query scherm en geef de array mee.
                new Add_Query(rapportnamen).setVisible(true);
                setDefaultCloseOperation(Add_User.EXIT_ON_CLOSE);
           }
           //Als er op remove_query is geklikt
           else if (e.getSource() == remove_query){
                //Kijk welke row is geselecteerd. 
                selectedrow = all_queries.getSelectedRow();
                //Als er geen rijs is geselecteerd.                            
                if(selectedrow == -1)
                {
                    //Laat een popup zien waarop staat dat je een rij moet selecteren.
                     JOptionPane.showMessageDialog(null, "Selecteer een rij","Mislukt",
                             JOptionPane.WARNING_MESSAGE);
                }
                //Als er wel een rij is geselecteerd
                else
                {
                    //Haal de naam van het geselecteerde query_text op.
                    query_name = dtm.getValueAt(selectedrow, 0).toString();

                    //Bouw de query op om dat query_text te remove_query
                    String query = "DELETE FROM rapporten Where rapportnaam ='"+ query_name +"'";
                    //Stuur de query over de socketconnectie naar de server
                    InfoClient.socketconnection.send(query);

                    //verwijdert de geselecteerde rij uit de tabel
                    dtm.removeRow(selectedrow);
                    //Laat een popupje zien waarop staat dat het rapport is verwijderd.
                    JOptionPane.showMessageDialog(null, query_name + " is verwijdert","Geslaagd",JOptionPane.INFORMATION_MESSAGE);
                }
           }
           //Als op menuitem queries is geklikt.
           else if (e.getSource() == queries){
               //Sluit dit scherm en open een nieuw queries scherm
                this.setVisible(false);
                new Queries().setVisible(true);
                setDefaultCloseOperation(Queries.EXIT_ON_CLOSE);
           }
           //Als op menuitem users is geklikt.
           else if (e.getSource() == users){
               //Sluit dit scherm af en open een nieuw users scherm.
                this.setVisible(false);
                new Users().setVisible(true);
                setDefaultCloseOperation(Users.EXIT_ON_CLOSE);
           }
                                           
    
    }

}
